### Project 10 IR Remote Control Smart Car **1.Principle** In the previous section, we have talked about how to control the state of an LED by IR remote control. So think in another side. If want to control a smart car by IR remote control, how can we achieve that? Actually it is very easy. The ARDUINO board is able to analyze and judge the infrared signals collected, finally drive the forward, backward and direction of motor. In the previous part, we have showed you about the button value of an infrared remote control. Next just need to type those values in the test code of infrared remote control for smart car. **2.Wiring Diagram** You should first connect the circuit according to the wiring diagram below. ![](media/image-20251218171517647.png) Let's review the decoding value of buttons on the remote control again. ![](media/image-20251218171539142.png) You can get the data information of buttons, such as: forward button 0x00FF629D; backward button 0x00FFA857; Stop button 0x00FF02FD; left turn button 0x00FF22DD; right turn button 0x00FFC23D. These buttons information can be used to control the smart car go forward, backward, turn left or turn right, and stop. So in the following, we type these data into the program. **3.Example Program as below** Code 13 ```c #include // libraries file int RECV_PIN = 15;// connect receiver module to A1,that is D15 interface int E1 = 9; // set the speed pin of motor A as D9 int E2 = 5; // set the speed pin of motor B as D5 int M1 = 2; // set the direction pin of motor A as D2 int M2 = 4; // set the direction pin of motor B as D4 long advance1 = 0x00FF629D;// set the forward button of car control long back1 = 0x00FFA857;// set the backward button of car control long stop = 0x00FF02FD;// set the Stop button of car control long left = 0x00FF22DD;// set the left turn button of car control long right = 0x00FFC23D;// set the right turn button of car control IRrecv irrecv(RECV_PIN); decode_results results; // used to save the decoding result void setup(void) { pinMode(RECV_PIN, INPUT);// set D15 as INPUT mode pinMode(M1,OUTPUT); // set M1 as OUTPUT mode pinMode(M2,OUTPUT); // set M2 as OUTPUT mode pinMode(E1,OUTPUT); // set E1 as OUTPUT mode pinMode(E2,OUTPUT); // set E2 as OUTPUT mode irrecv.enableIRIn();// initialize the infrared decoding } void advance(void) // set the forward motion { digitalWrite(M1,HIGH); // motor A turns forward, car wheel goes forward. digitalWrite(M2,HIGH); // motor B turns forward, car wheel goes forward. analogWrite(E1,150); // speed of motor A(can be adjusted according to the actual speed of motor. Turn up the value to accelerate, lower the value to decelerate.) analogWrite(E2,150); // speed of motor B(can be adjusted according to the actual speed of motor. Turn up the value to accelerate, lower the value to decelerate.) } void back(void) // set the backward motion { digitalWrite(M1,LOW); // motor A turns reverse, car wheel goes backward. digitalWrite(M2, LOW); // motor B turns reverse, car wheel goes backward. analogWrite(E1,150); // speed of motor A analogWrite(E2,150); // speed of motor B } void turnL(void) // set the left turn motion { digitalWrite(M1,LOW); // motor A turns reverse, car wheel goes backward. digitalWrite(M2, HIGH); // motor B turns forward, the wheels go forward, smart car turns left. analogWrite(E1,150); // speed of motor A analogWrite(E2,150); // speed of motor B } void turnR(void) // set the right turn motion { digitalWrite(M1,HIGH); // motor A turns forward, wheels go forward. digitalWrite(M2,LOW); // motor B turns reverse, wheels go backward, smart car turns right. analogWrite(E1,150); // speed of motor A analogWrite(E2,150); // speed of motor B } void stopp(void) // set the Stop motion { digitalWrite(M1,LOW); // motor A turns reverse digitalWrite(M2, LOW); // motor B turns reverse analogWrite(E1, 0); // speed of motor A, speed as zero, means Stop. analogWrite(E2, 0); // speed of motor B, speed as zero, means Stop. } void loop() { if (irrecv.decode(&results)) { if (results.value == advance1 )// If receive the command of forward button pressed advance();// car goes forward if (results.value == back1 )// If receive the command of backward button pressed back();//car goes backward if (results.value == left )// If receive the command of leftbutton pressed turnL();// car turns left if (results.value == right )// If receive the command of right turn button pressed turnR();// car turns right if (results.value == stop )// If receive the command of Stop button pressed stopp();// car stops irrecv.resume(); // receive next encode } } ``` **4.Example Result** Upload well the program to main board, then press down the POWER button on the motor drive shield lightly. Aimed at the IR receiver module, press any buttons on the remote control, you should see it control the motor, thus can control smart car run freely. ![](media/image-20251218171830227.png) ![](media/image-20251218171953229.png)